﻿/*----------------------------------------------------------------

// 公司名称：公司名称
//
// 产品名称：Gaf
//
// 创 建 人：netcasewqs
// 创建日期：2022/3/4
// 邮    箱：netcasewqs@qq.com
//
// Copyright (C) 2022 Gaf，保留所有权利。
//
//----------------------------------------------------------------*/
using Microsoft.Extensions.Configuration;

using System.Reflection.Metadata;

namespace Gaf.Impl;

record MethodInvoker(MethodInfo Method, ParameterInfo? ProviderParameter = null)
{
    public bool InvokeMatchMethod(object instance, IServiceProvider? provider)
    {
        return (bool)Invoke(instance, provider);
    }

    protected virtual object Invoke(object instance, IServiceProvider? provider)
    {
        try
        {
            var o = Method.IsStatic ? null : instance;

            if (ProviderParameter != null)
                return Method.Invoke(o, new object?[] { provider })!;
            else
                return Method.Invoke(o, null)!;


        }
        catch (TargetInvocationException ex)
        {
            throw ex.InnerException!;
        }
    }

    public void InvokeStartMethod(object instance, IServiceProvider? provider)
    {
        Invoke(instance, provider);
    }
}
